# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/10/24 0024 20:45
@Author : 测试开发工程师
@File : 15. 多表和笛卡儿积.py
@Software: PyCharm
============================
"""

"""
一对多
多对多
一对一

一对多
定义： 主表的一条记录可以对应从表的多条记录
例子： 部门表，员工表
建表原则：在一对多关系中，多的表定位从表，设置外键指向主表




多对多   第三张表包含前面两个表的主键
定义：主表的多条记录可以对应从表的多条记录
例子：商品信息表，客户表，订单表
建表原则：需要创建第三张表作为中间表，中间表需要包含两张表的主键。

一对一
定义：从表的一条记录对应主表的一条记录
例子：员工信息表与身份证表,联系方式
建表原则： 这种对应关系的数据，通常放在单表里



多表查询与数据准备
笛卡尔积简介
多表查询的定义
定义： 通过查询多张表格获取数据，至少涉及两张表
数据准备：
创建部门表，插入三条数据
创建员工信息表添加外键约束，允许级联删除，并向三个部门插入对应的员工信息
## 创建部门信息表 
CREATE TABLE dept(  
id INT PRIMARY KEY AUTO_INCREMENT,  
dept_name VARCHAR(20),  
dept_manager VARCHAR(20),  
dept_location VARCHAR(20)  
); 
INSERT INTO dept VALUES(1,'研发部','张无忌','北京');
INSERT INTO dept VALUES(2,'运营部','赵敏','深圳');
INSERT INTO dept VALUES(3,'销售部','周芷若','成都');

# 创建员工信息表并添加级联删除的外键约束 
CREATE TABLE emp_part(  
emp_id INT PRIMARY KEY AUTO_INCREMENT,  
ename VARCHAR(20),  
age INT ,  
gender VARCHAR(10),
dept_id INT,
salary INT,
向员工信息表中插入数据
INSERT INTO emp_part VALUES(1,'令狐冲',25,'男','1',20000);
INSERT INTO emp_part VALUES(2,'任盈盈',23,'女','1',15000);  
INSERT INTO emp_part VALUES(3,'岳不群',45,'男','1',40000);
INSERT INTO emp_part VALUES(4,'任我行',40,'男','1',30000); 
INSERT INTO emp_part VALUES(5,'岳灵珊',21,'女','1',10000);
INSERT INTO emp_part VALUES(6,'赵灵儿',21,'女','2',7000); 
INSERT INTO emp_part VALUES(7,'林月如',22,'女','2',10000); 
INSERT INTO emp_part VALUES(8,'阿奴',20,'女','2',7000); 
INSERT INTO emp_part VALUES(9,'李逍遥',25,'男','2',15000); 
INSERT INTO emp_part VALUES(10,'景天',28,'男','2',20000);
INSERT INTO emp_part VALUES(11,'邱莹莹',21,'女','3',5000);
INSERT INTO emp_part VALUES(12,'关雎尔',22,'女','3',8000);
INSERT INTO emp_part VALUES(13,'曲筱绡',23,'女','3',10000);
INSERT INTO emp_part VALUES(14,'樊胜美',30,'女','3',10000);
INSERT INTO emp_part VALUES(15,'安迪',28,'女','3',20000);

笛卡尔积
定义: 笛卡尔积是一个数学概念，又称直积，它是指两个集合元素所有可能有序对的集合。
例子：
A={a,b},B={c,d}
A*B ={(a,c),(b,c),(a,d),(b,d)}
语法：select 字段名称 from 表1， 表2





"""
